package com.yb0os1.CglibProxy;

/*我们首先搞懂Cglib代理和JDK代理的区别

  Cglib代理：
    1、Cglib代理是针对类来实现代理的，他的原理是对指定的目标类生成一个子类，并覆盖其中方法实现增强，
    2、Cglib是采用底层的字节码技术实现对目标类进行操作，对目标类进行子类继承，所以Cglib代理性能比JDK代理性能高，
    3、Cglib代理创建的是目标类的子类，Cglib代理是采用继承的方式，Cglib代理是采用ASM

  JDK代理：
    1、JDK代理是针对接口来实现代理的，他的原理是动态生成一个实现接口的类，并覆盖其中的方法实现增强，
    2、JDK代理是采用接口的方式，JDK代理创建的是目标类的子类，JDK代理是采用动态代理的方式，JDK代理是采用JDK的API

  Cglib代理和JDK代理的比较
    1、Cglib代理是采用继承的方式，JDK代理是采用实现接口的方式。
    2、Cglib代理创建的是目标类的子类，JDK代理创建的是目标类的实现类。
 */
public class Test {
    public static void main(String[] args) throws Exception {
        Bean bean = new Bean();
        //我们想要在bean的print方法执行之前之后打印一些逻辑，那么可以创建bean的代理
        Bean beanProxy = MyProxyFactory.createProxy(bean);
        System.out.println(beanProxy.print());
    }
}
